package cn.tedu._10security.service;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

public class UserDetailsServiceImpl implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        /*
            1.用户完成: 用户访问其中一个资源:/api/private/hello;
            2.开发完成: 到Spring Security的配置类SecurityConfig中确认该请求是否需要认证[需要认证];
            3.框架完成: 跳转到框架提供的登录页面;
            4.用户完成: 用户输入用户名和密码,点击登录按钮,发送请求至Spring Security提供的UserDetailsService接口中的loadUserByUsername()方法中;
            5.开发完成: 通过username到数据库中的用户表中查询该用户对应的密码;
            6.框架完成: 将查询到的密码与用户输入的密码进行比较;
            7.框架完成: 如果密码不一致,登录失败[用户名或密码错误];
            8.框架完成: 如果密码一致,认证通过了,接下来进入鉴权环节;
            9.开发完成: 通过用户名从数据库中查询该用户的权限列表【数据库中:用户表、角色表、权限表】;
            10.框架完成: 确认该用户是否拥有访问 /api/private/hello 资源的权限;
               10.1 框架: 如果有权限,则访问成功;
               10.2 框架: 如果没有权限,则访问失败[没有权限];
         */
        return User.withUsername(username)
                .password("{noop}123456") //未来是从数据库中查询出来的密码[{noop}使用明文密码];
                .authorities("sys:private:view", "sys:private:edit") //未来是从数据库中查询出来的权限列表;
                .build();
    }
}













